home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / language / parallax / more_exa.tar / more / Graphics / Rgb2tiff.c < prev    next >
C/C++ Source or Header  |  1991-06-27  |  8KB  |  304 lines

  1. #include <stdio.h>
  2. #include <ctype.h>
  3.  
  4. #define Length 65536  /* entspricht HEX: 0001 0000 */
  5.  
  6. FILE *fi, *fo;
  7. char zahl[10];
  8.  
  9. int
  10. getword (in)
  11.   FILE *in;
  12. {
  13.   int i;
  14.   int j=0, k = 0;
  15.  
  16.   zahl[j] = '\0';
  17.   while ((i = getc (in)) != EOF){
  18.  
  19.   if (i!=' ' && i!='\t' && i!='\n') {
  20.     zahl[j++] = i;
  21.   } else if (j > 0) {
  22.     zahl[j] = '\0';
  23.     return (1);
  24.   } 
  25. }
  26.      return (0);
  27.  
  28. }
  29.  
  30. main ()
  31. {
  32.   int i,j;
  33.   char output[20], input[20];       /* Aus- und Eingabedatei */
  34.   int c;
  35.   int b1, b, l1, l;                 /* Breite, Laenge */
  36.   int sl2, sl1, sl, sbco2, sbco1, sbco;  /* Striplaenge, Striplaengenoffset */
  37.   int si1, si, so2,so1, so;         /* strips/img, stripoffsets  */
  38.   int rs2, rs1, rs;                 /* rows/strip */
  39.   int onestrip = 0;                 /* =0: mehrere Strips,
  40.                        =1: einStrip   */
  41.   int wordcount;
  42.  
  43.   printf ("Eingabedatei:");
  44.   scanf ("%s", input);
  45.   if (!(fi = fopen (input, "r"))) {
  46.      printf ("File kann nicht geoeffnet werden");
  47.      exit(1);
  48.    }
  49.  
  50.   printf ("Ausgabedatei:");
  51.   scanf ("%s", output);
  52.   if (!(fo = fopen (output, "w"))) {
  53.      printf ("File kann nicht geoeffnet werden");
  54.      exit (1);
  55.    }
  56.  
  57.   getword (fi);
  58.   b = atoi (zahl);
  59.   getword (fi);
  60.   l = atoi (zahl);
  61.  
  62. printf ("Laenge: %d\n", l);
  63. printf ("Breite: %d\n", b);
  64.  
  65.   rs = (Length + b*3)/(b*3);
  66. printf ("rs: %d\n", rs);
  67.   si = (l + rs - 1)/rs;
  68. printf ("si: %d\n", si);
  69.  
  70.   if (si>255) {
  71.     si1 = si/256;
  72.     si = si%256;
  73.   } else {
  74.     si1 = 0;
  75.     if (si == 1) {
  76.       onestrip = 1;
  77. printf ("onestrip\n");
  78.     }
  79.   }
  80.  
  81.   
  82.   if (!onestrip) {                         /* maximale Striplaenge */
  83.     sl = rs*b*3;
  84.     so = 204 + si*8;
  85.   } else {                                 /* gesamtes Bild in einem Strip */
  86.     sl = b*l*3;
  87.     so = 204;
  88.   }
  89.  
  90.  
  91.   if (rs>255){
  92.     rs1 = rs/256;
  93.     if (rs1>255){
  94.       rs2 = rs1/256;
  95.       rs1 = rs1%256;
  96.     } else
  97.       rs2 = 0;
  98.     rs = rs%256;
  99.   } else {
  100.     rs2 = 0;
  101.     rs1 = 0;
  102.   }
  103.  
  104.   if (b>255) {
  105.     b1 = b/256;
  106.     b = b%256;
  107.   } else
  108.     b1 = 0;
  109.  
  110.   if (l>255) {
  111.     l1 = l/256;
  112.     l = l%256;
  113.   } else
  114.     l1 = 0;
  115.  
  116.   if (so>255) {
  117.     so1 = so/256;
  118.     so = so%256;
  119.   } else
  120.     so1 = 0;
  121.  
  122.   if (sl>255){
  123.     sl1 = sl/256;
  124.     if (sl1>255){
  125.       sl2 = sl1/256;
  126.       sl1 = sl1%256;
  127.     } else
  128.       sl2 = 0;
  129.     sl = sl%256;
  130.   } else {
  131.     sl2 = 0;
  132.     sl1 = 0;
  133.   }
  134.  
  135.   if (!onestrip) {                           /* Offset fuer Striplaengen */
  136.     if ((sbco = 204+si*4) > 255) {
  137.       sbco1= sbco/256;
  138.       sbco = sbco%256;
  139.     } else
  140.       sbco1 = 0;
  141.     sbco2 = 0;
  142.   } else {
  143.     sbco = sl;
  144.     sbco1 = sl1;
  145.     sbco2 = sl2;                            /* Striplaenge */
  146.   }
  147.     
  148.  
  149.    putc (77, fo);   putc (77, fo);   putc (0, fo);   putc (42, fo);
  150.    putc (0, fo);   putc (0, fo);   putc (0, fo);   putc (8, fo); /* offset */
  151.    putc (0, fo);   putc (14, fo); /* Anz. Eintraege */
  152.    /* 4d4d 002a 0000 0008 000e*/
  153.  
  154.    putc (0, fo);   putc (254, fo);   putc (0, fo);   putc (4, fo);
  155.    putc (0, fo);   putc (0, fo);   putc (0, fo);   putc (1, fo);
  156.    putc (0, fo);   putc (0, fo);   putc (0, fo);   putc (0, fo);
  157.    /* 00fe 0004 0000 0001 0000 0000*/
  158.  
  159.    putc (1, fo);   putc (0, fo);   putc (0, fo);   putc (3, fo);
  160.    putc (0, fo);   putc (0, fo);   putc (0, fo);   putc (1, fo);
  161.    putc (b1, fo);   putc (b, fo);   putc (0, fo);   putc (0, fo);
  162.    /* 0100 0003 0000 0001 b1 b 0000*/ 
  163.  
  164.    putc (1, fo);  putc (1, fo);   putc (0, fo);   putc (3, fo);
  165.    putc (0, fo);   putc (0, fo);   putc (0, fo);   putc (1, fo);
  166.    putc (l1, fo);   putc (l, fo);   putc (0, fo);   putc (0, fo);
  167.    /* 0101 0003 0000 0001 l1 lx 0000 Laenge*/
  168.  
  169.    putc (1,fo);   putc (2,fo);   putc (0,fo);   putc (3,fo);
  170.    putc (0,fo);   putc (0,fo);   putc (0,fo);   putc (3,fo);
  171.    putc (0,fo);   putc (0,fo);   putc (0,fo);   putc (198,fo);
  172.    /* 0102 0003 0000 0003 0008 0000 Bit/Sampl*/
  173.  
  174.    putc (1,fo);   putc (3,fo);   putc (0,fo);   putc (3,fo);
  175.    putc (0,fo);   putc (0,fo);   putc (0,fo);   putc (1,fo);
  176.    putc (0,fo);   putc (1,fo);   putc (0,fo);   putc (198,fo);
  177.    /* 103 Compression */
  178.  
  179.    putc (1,fo);   putc (6,fo);   putc (0,fo);   putc (3,fo);
  180.    putc (0,fo);   putc (0,fo);   putc (0,fo);   putc (1,fo);
  181.    putc (0,fo);   putc (2,fo);   putc (0,fo);   putc (198,fo);
  182.    /* 0106 0000 0001 0002 0000 RGB */
  183.  
  184.    putc (1,fo);   putc (17,fo);   putc (0,fo);   putc (4,fo);
  185.    putc (0,fo);   putc (0,fo);   putc (si1,fo);   putc (si,fo);
  186.    putc (0,fo);   putc (0,fo);   putc (0,fo);  putc (204,fo);
  187.    /* 0111 0004 0000 0001 0000 0070 Offset */
  188.  
  189.    putc (1,fo);   putc (21,fo);   putc (0,fo);   putc (3,fo);
  190.    putc (0,fo);   putc (0,fo);   putc (0,fo);   putc (1,fo);
  191.    putc (0,fo);   putc (3,fo);   putc (0,fo);   putc (190,fo);
  192.    /* 0115 0003 0000 0001 0003 0000 Sampl/Pix*/
  193.  
  194.    putc (1, fo); putc (22, fo); putc (0, fo); putc (4, fo);
  195.    putc (0, fo); putc (0, fo); putc (0, fo); putc (1, fo);
  196.    putc (0, fo); putc (rs2, fo); putc (rs1, fo); putc (rs, fo);
  197.   /* 116  rows/strip */
  198.  
  199.    putc (1, fo); putc (23, fo); putc (0, fo); putc (4, fo);
  200.    putc (0, fo); putc (0, fo); putc (si1, fo); putc (si, fo);
  201.    putc (0, fo); putc (sbco2, fo); putc (sbco1, fo); putc (sbco, fo);
  202.   /* 0117 stripbytes */
  203.  
  204.    putc (1, fo); putc (26, fo); putc (0, fo); putc (5, fo);
  205.    putc (0, fo); putc (0, fo); putc (0, fo); putc (1, fo);
  206.    putc (0, fo); putc (0, fo); putc (0, fo); putc (182, fo);
  207.   /*11a x-Resol. */
  208.  
  209.    putc (1, fo); putc (27, fo); putc (0, fo); putc (5, fo);
  210.    putc (0, fo); putc (0, fo); putc (0, fo); putc (1, fo);
  211.    putc (0, fo); putc (0, fo); putc (0, fo); putc (190, fo);
  212.   /*11b y-Resol. */
  213.  
  214.    putc (1,fo);   putc (28,fo);   putc (0,fo);   putc (3,fo);
  215.    putc (0,fo);   putc (0,fo);   putc (0,fo);   putc (1,fo);
  216.    putc (0,fo);   putc (1,fo);   putc (0,fo);   putc (198,fo);
  217.    /* 011c 0003 0000 0001 0001 0000 Sequ.Ablage*/
  218.  
  219.    putc (1, fo); putc (40, fo); putc (0, fo); putc (3, fo);
  220.    putc (0, fo); putc (0, fo); putc (0, fo); putc (1, fo);
  221.    putc (0, fo); putc (2, fo); putc (0, fo); putc (190, fo);
  222.   /*128 Res. Unit */
  223.  
  224.  
  225.   putc (0,fo);
  226.   putc (0,fo);
  227.   putc (0,fo);
  228.   putc (0,fo);
  229.   /* Null-Zeiger */
  230.  
  231.   putc (0, fo); putc (0, fo);  putc (0, fo); putc (72, fo);
  232.   putc (0, fo); putc (0, fo);  putc (0, fo); putc (1, fo);
  233.   /* X-Aufloesung */
  234.  
  235.   putc (0, fo); putc (0, fo);  putc (0, fo); putc (72, fo);
  236.   putc (0, fo); putc (0, fo);  putc (0, fo); putc (1, fo);
  237.   /* Y-Aufloesung */
  238.  
  239.   putc (0, fo); putc (8, fo);
  240.   putc (0, fo); putc (8, fo);
  241.   putc (0, fo); putc (8, fo);
  242.   /* Bits/Sample */
  243.  
  244.   if (!onestrip) {
  245.     /* Stripoffsets */
  246.     so2 = 0;
  247.     for (i= 0; i< si; i++){
  248.       putc (0, fo); putc (so2, fo); putc (so1, fo); putc (so, fo);
  249.       so = so+sl+256*sl1+65536*sl2;
  250.  
  251.       if (so>255) {
  252.     so1 = so1 + so/256;
  253.     if (so1 > 255 ){
  254.       so2 = so2 + so1/256;
  255.       so1 = so1%256;
  256.     } 
  257.     so = so%256;
  258.       }
  259.     }
  260.  
  261.     /* Striplaengen */
  262.  
  263.   
  264.     for (i=1; i<si; i++){
  265.       putc (0, fo); putc (sl2, fo); putc (sl1, fo); putc (sl, fo);
  266. printf ("i: %d, Striplaenge: %d %d %d\n", i, sl2, sl1, sl);
  267.     }
  268.     
  269.     b = b1*256 + b;
  270.     l = l1*256 + l;
  271.  
  272.     sl = b*l*3 - (si-1)*(sl+ 256*sl1 + sl2*256*256);
  273.     sl1 = 0;
  274.     sl2 = 0;
  275.  
  276.     if (sl>255){
  277.       sl1 = sl/256;
  278.       if (sl1>255){
  279.     sl2 = sl1/256;
  280.     sl1 = sl1%256;
  281.       } else
  282.     sl2 = 0;
  283.       sl = sl%256;
  284.     } 
  285. printf ("i: %d, Striplaenge: %d %d %d\n", i, sl2, sl1, sl);
  286.  
  287.     putc (0, fo); putc (sl2, fo); putc (sl1, fo); putc (sl, fo);
  288.   }
  289.  
  290.   wordcount = 1;
  291.   while (getword (fi) && wordcount <= b*l*3){
  292.     c = atoi(zahl);
  293.     putc (c, fo);
  294.     wordcount ++;
  295.   }
  296.   fclose (fi);
  297.   fclose (fo);
  298.  
  299.  
  300.  
  301. }
  302.  
  303.   
  304.